#ifndef OCK_MEMORY_BRIDGE_OCK_ACLADAPTER_OCK_MEMORY_COPY_KIND_H
#define OCK_MEMORY_BRIDGE_OCK_ACLADAPTER_OCK_MEMORY_COPY_KIND_H

#include <ostream>
#include "ock/hmm/mgr/OckHmmHeteroMemoryLocation.h"

namespace ock {
namespace acladapter {


enum class OckMemoryCopyKind : uint32_t {
    HOST_TO_HOST = 1U,
    HOST_TO_DEVICE = 2U,
    DEVICE_TO_HOST = 4U,
    DEVICE_TO_DEVICE = 8U
};

OckMemoryCopyKind CalcMemoryCopyKind(hmm::OckHmmHeteroMemoryLocation src, hmm::OckHmmHeteroMemoryLocation dst);
std::ostream &operator<<(std::ostream &os, OckMemoryCopyKind kind);
std::pair<bool, uint32_t> ParseMemoryCopyKind(const std::string &buffer);

}
}
#endif